SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[SP_TCSOLI_APRO_I01]     
/*---------------------------------------------------------*/    
/*---Empresa              : OFISIS S.A.                  --*/    
/*---Cliente              : OFISIS S.A.                  --*/    
/*---Sistema              : Aprobaciones                 --*/    
/*---Modulo               : Aprobacion                   --*/    
/*---Programa             : Insersion 1er paso aprobac.  --*/    
/*---                       SOLICITUD_APROBACIONES       --*/    
/*---Script               : SP_TCSOLI_APRO_I01.sql       --*/    
/*---Nombre SP            : SP_TCSOLI_APRO_I01           --*/    
/*---Desarrollado por     : Diana Mena Cordova           --*/    
/*---Fecha Creaci=n       : 25/10/2001                   --*/    
/*---Base Datos           : SQL            --*/    
/*---Version              : 7.0                          --*/    
/*---Invoca a SP          :             --*/    
/*---Dropear a SP         : DROP PROC SP_TCSOLI_APRO_I01 --*/    
/*---SP_TCSOLI_APRO_I01 '01', '001', '00000502', '02/05/2001', 'SOL', 1500, 'E', '00000502','00000001PVI00000502', '', 'RCONTRER' --*/    
/*---------------------------------------------------------*/    
/*---- Modificado 1 por     : Percy D­az            ----*/    
/*---- Fecha Modificaci½n   : 21/11/2003            ----*/        
/*---- Detalle Modificaci½n : Se cambio el tipo de  ----*/      
/*---- dato de la variable @ISOB_0001 a  TD_VC_200  ----*/    
/*------------------------------------------------------*/    
/*---- Modificado 1 por     : DMC             ----*/    
/*---- Fecha Modificaci½n   : 26/05/2004            ----*/        
/*---- Detalle Modificaci½n : Modificacion en mensajes--*/      
/*---- de Emails, determinacion de grupos dinamicos  ---*/    
/*------------------------------------------------------*/    
@ISCO_EMPR            TD_VC_002,    
@ISCO_APRO            TD_VC_003,    
@ISNU_DOCU            TD_VC_050,    
@IDFE_DOCU            TD_DT_001,    
@ISUN_MEDI            TD_VC_003,    
@INIM_MONT       TD_NU_016_004,    
@ISTI_AUXI_EMPR       TD_VC_001,     
@ISCO_AUXI_EMPR       TD_VC_020,    
@ISDE_CLAV       TD_VC_050,    
@ISOB_0001       TD_VC_200,     
@ISDE_RUTA_DOCU  TD_VC_100,  
@ISTI_ENTI  TD_VC_001,  
@ISCO_ENTI  TD_VC_020,  
@ISNO_ENTI  TD_VC_100,  
@ISCO_USUA       TD_VC_008
	As
Declare     
    
@VSST_EXCE_AUXI TD_VC_001,    
@VSST_EXCE_MONT TD_VC_001,    
@VNNU_SOLI_SECU TD_IN_001,    
@VSSI_APRO  TD_VC_003,    
    
@VSUN_MEDI TD_VC_003,    
@VNMO_MINI TD_NU_016_004,    
@VNMO_NACI TD_NU_016_004,    
@VSST_ENVI_MAIL TD_VC_001_SINO,    
    
@VSCO_GRUP_APRO TD_VC_008,    
@VNNU_MINI_APRO TD_IN_001,    
@VNNU_SECU TD_IN_001,    
    
@CNNU_SECU_PASO TD_IN_001,    
@CNMO_MINI TD_NU_016_004,    
@CNMO_MAXI TD_NU_016_004,    
@CSUN_MEDI TD_VC_003,    
    
@CSCO_USUA TD_VC_008,    
@CSNU_PASO TD_VC_003,    
    
@VNFA_CAMB TD_NU_009_004,    
@VNFA_CAMB_ORIG TD_NU_009_004,    
    
@VSDE_MAIL_USUA TD_VC_050,    
    
--para aprobaciones OFIPLAN     
@VSCO_TRAB TD_VC_020,    
@VSCO_EMPL TD_VC_008,    
@VSCO_EMPR TD_VC_002,    
@VSTI_SOLI_PRES TD_VC_003,    
@VSNU_CORR_SOLI TD_VC_008,    
@VSCO_GRUP  TD_VC_008,    
    
@VNNU_SECU_MAIL TD_IN_001,    
@VSNO_USUA  TD_VC_050,    
    
--por modificaciones en el modelo     
@VSTI_APRO  TD_VC_003,    
@VSNO_STOR_PROC TD_VC_050,    
   
@VSTI_SITU  TD_VC_003,    
  
--por modificaciones en el modelo  
@VSDE_TIPO_APRO  TD_VC_050,    
@VSDE_ASUN  TD_VC_200,  
@VSDE_CONT  TD_VC_200,  
@VSTI_GRUP  TD_VC_003,  
@VSDE_RUTA_APLI TD_VC_050  
  
--Verifico que el documento no se encuentre en proceso de aprobacion     
If exists (Select NU_SOLI_SECU from TCSOLI_APRO     
    where DE_CLAV = @ISDE_CLAV and ST_SOLI != 'FIN')    
Begin    
  Select @VSSI_APRO = 'EXI'    
  Select @VSSI_APRO    
  Return    
End    
    
    
Begin Transaction  SP_TCSOLI_APRO_I01    
    
--Obtiene el tipo de aprobacion y el stored procedure    
Select @VSTI_APRO=t1.TI_APRO,@VSNO_STOR_PROC=t2.NO_STOR_PROC, @VSDE_TIPO_APRO=t2.DE_TIPO_APRO     
From TTTIPO_APRO t1, TTAPRO t2    
Where t1.CO_APRO=@ISCO_APRO    
And t2.TI_APRO=t1.TI_APRO    
    
--EXTRAE LOS DATOS DE LA APROBACION     
SELECT @VSUN_MEDI=UN_MEDI, @VNMO_MINI= MO_MINI, @VSST_ENVI_MAIL = ST_ENVI_MAIL    
FROM TRAPRO_EMPR     
WHERE CO_EMPR=@ISCO_EMPR AND CO_APRO=@ISCO_APRO    
    
    
    
--TIPO DE CAMBIO DE LA MONEDA DEL MONTO MIN     
SELECT @VNFA_CAMB = 0    
SELECT @VNFA_CAMB = ISNULL(FA_VNTA_OFIC, 1)    
FROM TCFACT_CAMB    
WHERE CO_MONE = @VSUN_MEDI    
AND FE_CAMB = GETDATE()    
    
SELECT @VNFA_CAMB_ORIG = 0    
SELECT @VNFA_CAMB_ORIG = ISNULL(FA_VNTA_OFIC, 1)    
FROM TCFACT_CAMB    
WHERE CO_MONE = @ISUN_MEDI    
AND FE_CAMB = GETDATE()    
    
    
If @VNFA_CAMB IS NULL or @VNFA_CAMB = 0    
  Select @VNFA_CAMB = 1    
    
If @VNFA_CAMB_ORIG IS NULL or @VNFA_CAMB_ORIG = 0    
  Select @VNFA_CAMB_ORIG = 1    
    
--Si el factor de cambio es 1 significa que voy a pasar desde SOLES     
If @VNFA_CAMB = 1    
  Select @VNFA_CAMB = ROUND(1/@VNFA_CAMB_ORIG,4)    
    
If @VSUN_MEDI != @ISUN_MEDI    
  Select @VNMO_MINI = @VNMO_MINI * @VNFA_CAMB    
    
    
--Valida excepci½n por auxiliar     
If exists ( SELECT *     
  FROM TDEXCE_APRO     
  WHERE CO_EMPR=@ISCO_EMPR     
  AND CO_APRO=@ISCO_APRO AND TI_AUXI_EMPR=@ISTI_AUXI_EMPR     
  AND CO_AUXI_EMPR=@ISCO_AUXI_EMPR)    
  Select @VSST_EXCE_AUXI = 'S'    
else    
  Select @VSST_EXCE_AUXI = 'N'    
    
    
--VALIDO SI TIENE EXCEPCION POR AUXILIAR O MONTO     
If @INIM_MONT < @VNMO_MINI    
  Select @VSST_EXCE_MONT = 'S'     
ELSE    
  Select @VSST_EXCE_MONT = 'N'    
    
    
    
--Si es una de las dos excepciones doy por aprobado el documento     
If (@VSST_EXCE_AUXI = 'S') or (@VSST_EXCE_MONT = 'S')    
  Begin    
    Select @VSTI_SITU = 'APR'     
    
      Exec('exec ' + @VSNO_STOR_PROC + '"' + @ISDE_CLAV + '",' +  @INIM_MONT + ',"' + @ISCO_USUA + '","' + @VSTI_SITU + '","'     + @VSTI_APRO + '","0"')    
        
    Select @VSSI_APRO = 'APR'    
    
    
  End    
Else     
  Begin    
     
    -- Inicializo el estado de aprobacion en 'ACT'-Activo(estado inicial), si se llega a generar el primer     
    -- paso de aprobacion recien se coloca el status de enviado, puede darse el caso de una mala    
    -- configuracion de los pasos de aprobacion que hagan que no se llegue a grabar el primer paso    
    
    Select @VSSI_APRO = 'ACT'    
        
    -- Grabo el "primer" paso de aprobaci½n --    
    
    DECLARE CU_TCSOLI_APRO_I01_1 CURSOR FOR    
    SELECT NU_SECU_PASO,NU_PASO,MO_MINI, MO_MAXI, UN_MEDI    
    FROM TTAPRO_PASO    
    WHERE CO_EMPR=@ISCO_EMPR AND CO_APRO=@ISCO_APRO     
    ORDER BY NU_PASO    
    
    OPEN CU_TCSOLI_APRO_I01_1    
    FETCH CU_TCSOLI_APRO_I01_1 INTO @CNNU_SECU_PASO, @CSNU_PASO, @CNMO_MINI, @CNMO_MAXI, @CSUN_MEDI    
    
    WHILE @@Fetch_status = 0    
    BEGIN    
    
    
      -- TIPO DE CAMBIO DE LA MONEDA DEL MONTO MIN --    
      SELECT @VNFA_CAMB = 0    
      SELECT @VNFA_CAMB = ISNULL(FA_VNTA_OFIC, 1)    
      FROM TCFACT_CAMB    
      WHERE CO_MONE = @CSUN_MEDI    
      AND FE_CAMB = GETDATE()    
    
      SELECT @VNFA_CAMB_ORIG = 0    
      SELECT @VNFA_CAMB_ORIG = ISNULL(FA_VNTA_OFIC, 1)    
      FROM TCFACT_CAMB    
      WHERE CO_MONE = @ISUN_MEDI    
      AND FE_CAMB = GETDATE()    
    
    
      If ISNULL(@VNFA_CAMB,0) = 0    
        Select @VNFA_CAMB = 1    
    
      If ISNULL(@VNFA_CAMB_ORIG,0) = 0    
        Select @VNFA_CAMB_ORIG = 1    
    
    
      -- Si el factor de cambio es 1 significa que voy a pasar desde SOLES --    
      If @VNFA_CAMB = 1    
        Select @VNFA_CAMB = ROUND(1/@VNFA_CAMB_ORIG,4)    
    
    
      -- PASO LOS MONTOS MINIMOS Y MAXIMOS A LA MONEDA DEL DOCUMENTO --    
      If @CSUN_MEDI != @ISUN_MEDI    
  Begin    
    Select @CNMO_MINI = @CNMO_MINI * @VNFA_CAMB    
    Select @CNMO_MAXI = @CNMO_MAXI * @VNFA_CAMB    
  End     
    
      -- Valida excepcion del paso --    
      If exists (SELECT *    
    FROM TDEXCE_PASO     
    WHERE CO_EMPR=@ISCO_EMPR AND CO_APRO=@ISCO_APRO    
    AND NU_SECU_PASO=@CNNU_SECU_PASO AND TI_AUXI_EMPR=@ISTI_AUXI_EMPR     
    AND CO_AUXI_EMPR=@ISCO_AUXI_EMPR)            Select @VSST_EXCE_AUXI = 'S'    
      else    
        Select @VSST_EXCE_AUXI = 'N'    
    
    
      -- Si no hay excepci½n por auxiliar ni por importe grabo el primer paso    
  IF (@VSST_EXCE_AUXI = 'N') and (@INIM_MONT>=@CNMO_MINI and @INIM_MONT<@CNMO_MAXI)    
 Begin    
    
    SELECT @VNNU_SOLI_SECU=ISNULL(MAX(NU_SOLI_SECU),0)+1     
   FROM TCSOLI_APRO    
    
   INSERT INTO TCSOLI_APRO (NU_SOLI_SECU,CO_EMPR,CO_APRO,NU_DOCU,FE_DOCU,UN_MEDI,     
         IM_MONT,OB_0001,ST_SOLI,FE_STAT_SOLI,TI_AUXI_EMPR,  
        CO_AUXI_EMPR, DE_CLAV, TI_ENTI, CO_ENTI, NO_ENTI, ST_APRO_FINA, DE_RUTA_DOCU,  
      CO_USUA_CREA, FE_USUA_CREA, CO_USUA_MODI, FE_USUA_MODI)    
         VALUES (@VNNU_SOLI_SECU,@ISCO_EMPR,@ISCO_APRO,@ISNU_DOCU,@IDFE_DOCU,@ISUN_MEDI,    
         @INIM_MONT,@ISOB_0001,'PRO',NULL,@ISTI_AUXI_EMPR,@ISCO_AUXI_EMPR,@ISDE_CLAV,    
  @ISTI_ENTI, @ISCO_ENTI, @ISNO_ENTI, NULL, @ISDE_RUTA_DOCU,   
  @ISCO_USUA,GETDATE(),@ISCO_USUA,GETDATE())     
    
   -- Se graba un paso previo con el usuario que envio el documento a aprobacion --    
   INSERT INTO TDSOLI_APRO (NU_SOLI_SECU,NU_SECU,CO_EMPR,CO_APRO,NU_SECU_PASO,    
         NU_PASO,CO_USUA,ST_APRO,FE_APRO,OB_0001,ST_MAIL_ENVI,    
         ST_AUTO,ST_OBSE,ST_PEND_ESPE,OB_PEND_ESPE,OB_SAPE_ESPE,ST_MAYO,  
  CO_USUA_CREA,FE_USUA_CREA, CO_USUA_MODI,FE_USUA_MODI)     
   VALUES (@VNNU_SOLI_SECU,0,@ISCO_EMPR,    
         @ISCO_APRO,@CNNU_SECU_PASO,'000',@ISCO_USUA,'APR',GETDATE(),NULL,'N',    
         'N','N','N',NULL,NULL,NULL,@ISCO_USUA,GETDATE(),@ISCO_USUA,GETDATE())     
    
   -- Si ha enviado el primer paso de aprobacion se coloca el status de enviado    
   Select @VSSI_APRO = 'ENV'    
    
   -- Recupero grupo y minimo aprobaciones para el paso    
  SELECT @VSCO_GRUP_APRO=CO_GRUP_APRO, @VNNU_MINI_APRO=NU_MINI_APRO     
  FROM TTAPRO_PASO     
  WHERE CO_EMPR = @ISCO_EMPR    
  AND CO_APRO = @ISCO_APRO    
  AND NU_SECU_PASO = @CNNU_SECU_PASO    
    
   -- Se graba el primer paso de aprobaci½n para todos los usuarios miembros del grupo --    
   -- si el nœmero m­nimo de los que deben aprobar el paso es mayor a 0 sino graba el  --    
   -- primer paso para el œnico usuario que conforma el grupo         --    
  
   -- Obtiene el tipo de grupo dinamico / estatico segun configuracion de paso  
   SELECT @VSTI_GRUP = TI_GRUP FROM TMGRUP_APRO WHERE CO_GRUP_APRO=@VSCO_GRUP_APRO     
  
   If @VSTI_GRUP = 'DIN'  
     Begin  
       SELECT @VSCO_GRUP_APRO = CO_GRUP_APRO  
       FROM TDGRUP_DINA  
       WHERE CO_GRUP_DINA=@VSCO_GRUP_APRO AND CO_USUA = @ISCO_USUA  
     End  
  
   DECLARE CU_TRGRUP_USUA_Q01_1 CURSOR FOR    
   SELECT CO_USUA    
   FROM TRGRUP_USUA    
   WHERE CO_GRUP_APRO=@VSCO_GRUP_APRO    
  
   OPEN CU_TRGRUP_USUA_Q01_1    
   FETCH CU_TRGRUP_USUA_Q01_1 INTO @CSCO_USUA    
    
   WHILE @@Fetch_status=0    
     Begin    
       
       -- Saco al usuario reemplazo de la tabla de ausentismos   
       Select @CSCO_USUA = CO_USUA_REEM  
       from TDUSUA_AUSE  
    where CO_USUA_AUSE = @CSCO_USUA  
    and FE_INIC_AUSE <= GETDATE() and FE_FINA_AUSE >= GETDATE()  
    and ST_ACTI = 'ACT'  
                    
       SELECT @VNNU_SECU=ISNULL(MAX(NU_SECU),0)+1     
              FROM TDSOLI_APRO    
       WHERE NU_SOLI_SECU=@VNNU_SOLI_SECU    
    
              INSERT INTO TDSOLI_APRO (NU_SOLI_SECU,NU_SECU,CO_EMPR,CO_APRO,NU_SECU_PASO,    
       NU_PASO,CO_USUA,ST_APRO,FE_APRO,OB_0001,ST_MAIL_ENVI,         
       ST_AUTO,ST_OBSE,ST_PEND_ESPE,OB_PEND_ESPE,OB_SAPE_ESPE,ST_MAYO,  
       CO_USUA_CREA,FE_USUA_CREA,CO_USUA_MODI,FE_USUA_MODI)     
       VALUES (@VNNU_SOLI_SECU,@VNNU_SECU,@ISCO_EMPR,    
       @ISCO_APRO,@CNNU_SECU_PASO,@CSNU_PASO,@CSCO_USUA,'SOL',NULL,NULL,'N',    
       'N','N','N',NULL,NULL,NULL,@ISCO_USUA,GETDATE(),@ISCO_USUA,GETDATE())     
    
    
          -- Recupero la direccion de correo del usuario-empleado    
           Select @VSDE_MAIL_USUA= DE_DIRE_MAIL,@VSNO_USUA= NO_USUA    
      From TMUSUA    
      Where CO_USUA = @CSCO_USUA    
    
   -- Envio el mail --    
      Select @VSDE_ASUN =  'Notificacion Aprobaciones: Nueva Aprobacion'  
      Select @VSDE_CONT =  'Tiene una nueva Solicitud de Aprobacion de ' + @VSDE_TIPO_APRO   
 If @ISNU_DOCU<>''   
    Select @VSDE_CONT = @VSDE_CONT + ' (' + @ISNU_DOCU + ') '  
     
   Select @VSDE_RUTA_APLI=DE_RUTA_APLI From TMPARA_APRO   
   Where CO_EMPR = @ISCO_EMPR   
     
      Select @VSDE_CONT = @VSDE_CONT + ' por Aprobar. Ingrese al sistema de Aprobaciones '   
      Select @VSDE_CONT = @VSDE_CONT + @VSDE_RUTA_APLI + '/asmsmxprin.aspx?nNU_SOLI_SECU=' + CONVERT(VARCHAR,@VNNU_SOLI_SECU,10) + '&nNU_SECU=' + CONVERT(VARCHAR,@VNNU_SECU,10)  
        
         If @VSST_ENVI_MAIL = 'S' and RTRIM(@VSDE_MAIL_USUA) IS NOT NULL    
          Begin    
       EXEC sp_send_cdosysmail @ISCO_EMPR, @VSDE_MAIL_USUA, @VSDE_ASUN , @VSDE_CONT      
    
          --guarda en tabla tdenvi_mail cada vez que se envie el mail     
    Select @VNNU_SECU_MAIL= ISNULL(MAX(NU_SECU_MAIL) + 1,1)    
    From TDENVI_MAIL    
    Where NU_SOLI_SECU = @VNNU_SOLI_SECU    
    And NU_SECU = @VNNU_SECU     
    
       
    INSERT INTO TDENVI_MAIL (NU_SOLI_SECU,NU_SECU,NU_SECU_MAIL,NO_REMI,NO_DEST,    
      DE_DIRE_DEST,DE_ASUN,DE_CONT,FE_ENVI,CO_USUA_CREA,FE_USUA_CREA,CO_USUA_MODI,FE_USUA_MODI)     
    VALUES (@VNNU_SOLI_SECU,@VNNU_SECU,@VNNU_SECU_MAIL,'APROBACIONES',@VSNO_USUA,@VSDE_MAIL_USUA,  
            @VSDE_ASUN, @VSDE_CONT, GETDATE(),@ISCO_USUA,GETDATE(),@ISCO_USUA,GETDATE())    
    
              End         
         FETCH CU_TRGRUP_USUA_Q01_1 INTO @CSCO_USUA    
      End      
    
   CLOSE CU_TRGRUP_USUA_Q01_1    
          DEALLOCATE CU_TRGRUP_USUA_Q01_1    
 Break    
      End    
      else    
 Begin    
   FETCH CU_TCSOLI_APRO_I01_1 INTO @CNNU_SECU_PASO,@CSNU_PASO,@CNMO_MINI,@CNMO_MAXI,    
       @CSUN_MEDI    
 End    
    END -- del while del cursor    
    
    CLOSE CU_TCSOLI_APRO_I01_1    
    DEALLOCATE CU_TCSOLI_APRO_I01_1    
    
  End -- del else de aprobado el documento    
    
--  Select @VSSI_APRO =   @VSSI_APRO    
    
  Commit Transaction  SP_TCSOLI_APRO_I01    
    
    
  Select @VSSI_APRO    
    
    
Return    
 /*------------------------------ Fin -------------------------------*/


GO
